package com.rollcall;

import java.util.Map;
import java.util.Set;

public class PronunciationUtil {
    // 多音字发音映射表（可扩展）
    private static final Map<String, String> POLYPHONE_MAP = Map.of(
        "翟", "宅",   // 姓氏读zhái
//        "翟", "zhái",   // 姓氏读zhái
        "单", "shàn",   // 姓氏读shàn
        "仇", "qiú",    // 姓氏读qiú
        "解", "xiè"     // 姓氏读xiè
        // 可继续添加其他多音字
    );
    
    /**
     * 校正文本中的多音字发音
     * @param text 原始文本
     * @return 校正后的文本（多音字替换为拼音）
     */
    public static String correctPronunciation(String text) {
        if(text == null || text.isEmpty()) {
            return text;
        }
        
        StringBuilder result = new StringBuilder();
        for(int i = 0; i < text.length(); i++) {
            String character = text.substring(i, i + 1);
            // 如果是已知多音字且是姓氏位置（第一个字）或明确需要校正的字
            if(POLYPHONE_MAP.containsKey(character)) {
                // 简单策略：如果是名字第一个字或者是独立出现的字
                if(i == 0 || text.length() == 1) {
                    result.append(POLYPHONE_MAP.get(character));
                } else {
                    // 可根据需要添加更复杂的判断逻辑
                    result.append(character);
                }
            } else {
                result.append(character);
            }
        }
        return result.toString();
    }
    
    /**
     * 智能处理姓名发音（加强版）
     * @param name 姓名
     * @return 处理后的发音文本
     */
    public static String handleNamePronunciation(String name) {
        if(name == null || name.isEmpty()) {
            return name;
        }
        
        // 特殊情况处理：复姓
        Set<String> compoundSurnames = Set.of("欧阳", "诸葛", "司马", "司徒", "夏侯");
        for(String surname : compoundSurnames) {
            if(name.startsWith(surname)) {
                return name; // 复姓暂不处理
            }
        }
        
        // 单姓处理
        if(name.length() >= 2) {
            String firstChar = name.substring(0, 1);
            if(POLYPHONE_MAP.containsKey(firstChar)) {
                return POLYPHONE_MAP.get(firstChar) + name.substring(1);
            }
        }
        
        return name;
    }
}
